home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 363 / tprolog1 / farben < prev    next >
Text File  |  1990-02-03  |  3KB  |  81 lines

  1.  
  2. % Demonstration für TOY Prolog
  3.  
  4. % Problem : Einfärben einer "Karte" mit 4 Farben, so daß
  5. %           benachbarte Gebiete verschiedene Farben erhalten.
  6.  
  7. % Erweiterung eines Beispiels aus : Kluzniak/Szpakowicz,
  8. % "Prolog for Programmers"  (dort zitiert aus Pereira & Porto, 1980)
  9.  
  10. % Verwendete "Karte" :
  11.  
  12. %     +-----------------+--------------------+
  13. %     |  R3             |         R6         |
  14. %     |  +----+--+------+-------------+---+  |
  15. %     |  |    |R4|                    |   |  |
  16. %     +--+    +--+                    |   |  |
  17. %     |  |            R2              |R5 |  |
  18. %     |  |                            |   +--+
  19. %     |  |                            |   |  |
  20. %     |  +----------------------------+---+  |
  21. %     |              R1                      |
  22. %     +--------------------------------------+
  23.  
  24. %  Folgendes Prädikat definiert die Relation "Farbe A darf an Farbe B angrenzen"
  25.  
  26. nachbarn(A, B) :- farbe(A), farbe(B), not A = B.
  27.  
  28. %  Die Farben sind als Zahlen definiert (Füllmuster für die graphische
  29. %  Ausgabe, daher "krumme" Zahlen) :
  30.  
  31. farbe(2).
  32. farbe(4).
  33. farbe(6).
  34. farbe(8).
  35.  
  36. %  Die folgenden Prädikate geben die einzelnen Kartenflächen graphisch aus.
  37.  
  38. r1 :- grf_poly([192,184, 224,184, 224,248, 384,248, 384,216, 416,216,
  39.                 416,280, 192,280, 192,184]).
  40.  
  41. r2 :- grf_poly([224,152, 256,152, 256,184, 288,184, 288,152, 352,152,
  42.                 352,248, 224,248, 224,152]).
  43.  
  44. r3 :- grf_poly([192,120, 320,120, 320,152, 224,152, 224,184, 192,184,
  45.                 192,120]).
  46.  
  47. r4 :- grf_poly([256,152, 288,152, 288,184, 256,184, 256,152]).
  48.  
  49. r5 :- grf_poly([352,152, 384,152, 384,248, 352,248, 352,152]).
  50.  
  51. r6 :- grf_poly([320,120, 416,120, 416,216, 384,216, 384,152, 320,152,
  52.                 320,120]).
  53.  
  54. %  Folgendes Prädikat findet eine Lösung des Problems :
  55.  
  56. lösung(R1, R2, R3, R4, R5, R6) :-
  57.       nachbarn(R1, R3), nachbarn(R1, R2), nachbarn(R1, R5), nachbarn(R1, R6),
  58.       nachbarn(R2, R3), nachbarn(R2, R4), nachbarn(R2, R5), nachbarn(R2, R6),
  59.       nachbarn(R3, R4), nachbarn(R3, R6),
  60.       nachbarn(R5, R6).
  61.  
  62.  
  63. % Folgendes Prädikat sucht die nächste Lösung und gibt sie graphisch aus :
  64.  
  65. ausgabe :- lösung(R1, R2, R3, R4, R5, R6), grf_f_type(2),
  66.             grf_f_style(R1), r1,
  67.             grf_f_style(R2), r2,
  68.             grf_f_style(R3), r3,
  69.             grf_f_style(R4), r4,
  70.             grf_f_style(R5), r5,
  71.             grf_f_style(R6), r6.
  72.  
  73. % Folgendes Prädikat sucht alle Lösungen und gibt sie aus (zwischen zwei
  74. %  verschiedenen Lösungen wird auf einen Tastendruck gewartet).
  75.  
  76. farbenproblem :- grf_mode, see(keybd), ausgabe, rch, fail.
  77. farbenproblem :- seen, txt_mode.
  78.  
  79. end.
  80.  
  81.